package com.edu.lawdoc.api.config;

import com.edu.lawdoc.api.controller.DemoController;
import com.edu.lawdoc.api.interceptor.ExceptionWithLogInterceptor;
import com.edu.lawdoc.api.interceptor.PvgInterceptor;
import com.edu.lawdoc.env.DaoEnviroment;
import com.edu.lawdoc.env.DaoPlugins;
import com.edu.lawdoc.validator.ValidatorEnv;
import com.jfinal.config.*;
import com.jfinal.ext.interceptor.SessionInViewInterceptor;
import com.jfinal.i18n.I18nInterceptor;
import com.jfinal.render.ViewType;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;

public class Config extends JFinalConfig {
    public static boolean IS_DEV = true;// 开发开关

    public static final int PAGE_SIZE = 10;
    public static final String TABLE_NAME_PREFIX = "sfm_";


    /**
     * 注意：用于启动的 main 方法可以在任意 java 类中创建，在此仅为方便演示
     *      才将 main 方法放在了 DemoConfig 中
     *
     *      开发项目时，建议新建一个 App.java 或者 Start.java 这样的专用
     *      启动入口类放置用于启动的 main 方法
     */
    public static void main(String[] args) {
        UndertowServer.start(Config.class, 8080, IS_DEV);
    }

    public void configConstant(Constants me) {
        me.setDevMode(IS_DEV);// 对修改的sql文件实现热加载
        //SqlReporter.setLog(!IS_DEV);// 打印sql

        me.setToCglibProxyFactory();  // 4.6 版本新增配置方式

        /** 配置将选择 jfinal 内置的 enjoy 模板引擎渲染模板，该配置是默认值，在使用时无需配置。 */
        me.setViewType(ViewType.JFINAL_TEMPLATE);

        /** 设置上传文件的根路径 */
        me.setBaseUploadPath("/");

        me.setError404View("/common/error_404.html");
        me.setError500View("/common/error_500.html");
    }

    public void configRoute(Routes me) {
        /** baseViewPath 为 "/_view"，该 Routes 对象之下映射的所有 Controller 都将取这个值 */
        me.setBaseViewPath("/_view");

        // jfinal 4.9.03 版新增了路由扫描功能，不必手动添加路由
        me.add("/demo", DemoController.class);
    }

    public void configEngine(Engine me) {}

    public void configPlugin(Plugins me) {
        DaoEnviroment daoEnviroment = new DaoEnviroment();
        DaoPlugins daoPlugins = daoEnviroment.init(IS_DEV);
        me.add(daoPlugins.getConnectionPoolPlugin());
        me.add(daoPlugins.getActiveRecordPlugin());

        ValidatorEnv.publishJs();
    }

    public void configInterceptor(Interceptors me) {
        /**
         * 试图从请求中通过controller.getPara(“_locale”)获取locale参数，如果获取到则将其保存到cookie之中
         * 如果controller.getPara(“_locale”)没有获取到参数值，则试图通过controller.getCookie(“_locale”)得到locale参数
         * 如果以上两步仍然没有获取到locale参数值，则使用I18n. defaultLocale的值做为locale值来使用
         * 使用前面三步中得到的locale值，通过I18n.use(locale)得到Res对象，并通过controller.setAttr(“_res”, res)将Res对象传递给页面使用
         * 如果I18nInterceptor. isSwitchView为true值的话还会改变render的view值，实现整体模板文件的切换，详情可查看源码。
         */
        me.add(new I18nInterceptor());
        me.add(new SessionInViewInterceptor());

        me.add(new PvgInterceptor());

        /**
         * 一定要放在所有拦截器的最后
         */
        me.add(new ExceptionWithLogInterceptor());
    }
    public void configHandler(Handlers me) {}
}
